#include<iostream>
#include<sstream>
#include<string>
#include<memory>
#include<jsoncpp/json/json.h>
using namespace std;

int main(){
    const char * name = "小明";
    int age = 18 ;
    float score[]= {77.5 , 88 ,93.6};
    //创建一个Value实例
    Json::Value root;

    //向Value实例中添加数据
    root["姓名"] = name;
    root["年龄"] = age;
    root["成绩"].append(score[0]);
    root["成绩"].append(score[1]);
    root["成绩"].append(score[2]);

    //创建一个StreamWriterBuilder实例
    Json::StreamWriterBuilder swb ;

    std::unique_ptr<Json::StreamWriter> sw(swb.newStreamWriter());

    stringstream ss;
    //开始序列化,json序列化的字符串保存在ss中
    sw->write(root , &ss);
    cout<<ss.str()<<endl;

    //反序列化过程
    string json_str = ss.str();//获取json字符串

    Json::Value root2;

    Json::CharReaderBuilder cwb;

    unique_ptr<Json::CharReader> cw(cwb.newCharReader());

    string err;
    //反序列化过程
    bool ret = cw->parse(json_str.c_str() ,json_str.c_str() + json_str.size() , &root2 , &err);
    if(ret == false){
        cout<<"反序列化失败"<< err <<endl;
    }

    // 输出反序列化后的数据
    cout << "姓名: " << root2["姓名"].asCString() << endl;
    cout << "年龄: " << root2["年龄"].asInt() << endl;
    cout << "成绩: ";
    for (int i = 0; i < root2["成绩"].size(); ++i) {
        cout << root2["成绩"][i].asFloat() << " ";
    }
    cout << endl;


    return 0;
}